Labview 多循环同时运行的变量初始化和同步问题 | 您所在的位置:网站首页 › labview while循环次数 › Labview 多循环同时运行的变量初始化和同步问题 |
1.问题背景 在Labview编程过程中,有时候会使用多while循环同时运行,以获得更好的实时性,尤其是做数据采集的时候。笔者在一个应用实例中出现Stop变量无法同步的问题,经过调试找出解决方案,记录一下并作为学友们的参考。 以下是为这个问题设计的一个demo程序。其功能是在两个同时运行的while中,定时更新计数值i,并且可以使用同一个stop按键停止。 这里边使用“局部变量”来做变量同步,要注意的是,Labview的局部变量作用域是当前vi,C的局部变量作用域是当前函数。局部变量在vi里边相当于一个游离的X,非常方便对数据进行操作,同时,副作用是可能破坏程序逻辑。 2.现象分析 图1是初步设计的程序。注意这个时候是不能正常运行的,因为stop按键的动作属性属性(图2,按键时改变并反弹)不匹配。 图1 初步设计的程序 修改为图3的按键动作属性,即可正常运行。 图3 采样局部变量时按键属性需要设置为“按键时值改变” 但是,这样的改变带来的问题就是,当程序停止后,无法再重新运行,因为stop被保持为true。 改进的方法是在初始化的时候,同样通过局部变量操作将stop设为false。图4 图4 加入初始化操作 图5 加入对stop初始化后的运行结果 到此,并不是完美的。因为在一个比较复杂的程序中,程序的初始化阶段可能有很多操作,也可能导致一些延时。图6模拟了我的程序的初始化的情况。 图7为这种情况下所出现的问题:一个循环不工作了!! 图6 对复杂程序变量初始化的模拟 图7 根据图6对复杂情况初始化的模拟,结果发现,一个循环不工作了! 出现这个问题的原因是: 如图6的初始化方法,当初始化时延较大的时候,第一个循环在stop变量还没有被初始化情况下,就开始运行了,结果就是直接退出。而第二个循环是可以正常运行的。 图8是推荐的正确初始化方法,通过顺序结构,确保初始化完整地完成以后,再进入各个循环的执行环节。 图8 正确的初始化方法,通过顺序结构进行执行顺序控制,确保初始化完整执行 图9 正确的运行结果 图9 为正确初始化的运行结果。 一个简单的问题的分析,希望对大家有所帮助。 |
CopyRight 2018-2019 实验室设备网 版权所有 |